package utils

import (
	"blog/app/models"
	"fmt"
	redis "github.com/go-redis/redis/v8"
	"github.com/spf13/viper"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
)

// InitConfig 初始化项目配置信息
func InitConfig() {
	viper.SetConfigName("app")    // 读取的配置文件名
	viper.AddConfigPath("config") // 读取的配置目录
	err := viper.ReadInConfig()
	if err != nil {
		fmt.Println("读取viper错误", err)
	}
}

var MySqlDB *gorm.DB
var MysqlErr error

// InitMysql 初始化连接MySQL
func InitMysql() {
	dns := viper.GetString("mysql.dns")
	MySqlDB, MysqlErr = gorm.Open(mysql.Open(dns), &gorm.Config{
		// gorm日志模式：silent
		//Logger: logger.Default.LogMode(logger.Silent), 不显示SQL
		Logger: logger.Default.LogMode(logger.Info), // 显示所有SQL
		// 外键约束
		DisableForeignKeyConstraintWhenMigrating: true,
		// 禁用默认事务（提高运行速度）
		SkipDefaultTransaction: true,
		NamingStrategy: schema.NamingStrategy{
			// 使用单数表名，启用该选项，此时，`User` 的表名应该是 `user`
			SingularTable: true,
		},
	})
	if MysqlErr != nil {
		fmt.Println("初始化MySQL失败", MysqlErr)
	}
	MySqlDB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8") // 设置MySQL数据格式为utf8

	newMysqltables()

}

// 初始化数据表
func newMysqltables() {
	err := MySqlDB.AutoMigrate(&models.UserBasic{}, &models.User{}, &models.Tags{})
	if err != nil {
		fmt.Println("初始化表失败", err)
		return
	}
}

var RedisDB *redis.Client

// InitRedis 初始化redis
func InitRedis() {
	RedisDB = redis.NewClient(&redis.Options{
		Addr: viper.GetString("redis.addr"),
		DB:   viper.GetInt("redis.DB"),
	})
	fmt.Println(RedisDB)
}
